﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Windows.Media;

namespace Tetris.Model
{
    public interface ITetrisModel : INotifyPropertyChanged
    {
        IElementModel NextElement
        { 
            get;
        }

        IElementModel CurrentElement //jesli klocek "siadzie" to nastepny staje sie CurrentElement, a nastepny jest losowany
        { 
            get;
        }

        IList< IList<int> > Lines //indeksem jest linia, dla kazdej linii trzymana jest lista kwadratow w linii
        { 
            get;
        }

        int CanvasHeight
        {
            get;
        }

        int CanvasWidth
        {
            get;
        }

        SolidColorBrush CanvasColor
        { 
            get;
        }

        bool EndOfGame
        { 
            get;
        }

        int BlockHeight
        {
            get;
        }

        int BlockWidth
        {
            get;
        }

        BlockCollectionModel AllBlocksCollection
        {
            get; set;
        }

        int Score
        {
            get; set;
        }

        bool CanElementMoveDown(IElementModel elementModel);
        bool CanElementMoveLeft(IElementModel elementModel);
        bool CanElementMoveRight(IElementModel elementModel);
        bool CanElementRotate(IElementModel elementModel);

        void GetNextElement();
        void AddLastBlockToCollection();
        bool DeleteFullLines(IElementModel elementModel);

        void MoveLeft();
        void MoveRight();
        void MoveDown();
        void Rotate();
    }
}
